package com.example.module_main.recevier

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.text.TextUtils
import android.util.Log
import cn.jpush.android.api.JPushInterface
import com.alibaba.android.arouter.launcher.ARouter
import com.example.lib_common.Router
import com.example.lib_common.utils.LoggerUtils
import org.json.JSONException
import org.json.JSONObject

/*
自定义广播
 */
class MyReceiver : BroadcastReceiver() {
    //MyReceiver继承自 BroadcastReceiver，用于接收极光推送的广播事件
    companion object {
        const val TAG = "MyReceiver"
    }

    // 是广播接收器的核心方法，当极光推送发送广播时，系统会调用此方法
    override fun onReceive(p0: Context?, p1: Intent?) {
        //数据
        val bundle = p1?.extras// 获取 Intent 携带的数据
        //intent?.extras获取极光推送发送的附加数据（Bundle），包含推送内容、标题、注册 ID 等信息。

        if (p1?.action == JPushInterface.ACTION_REGISTRATION_ID) {//触发时机：当设备成功注册极光推送时（首次安装或重新注册）
            val registerionId = bundle?.getString(JPushInterface.EXTRA_REGISTRATION_ID)
            //EXTRA_REGISTRATION_ID是设备的唯一标识..可用于服务器绑定推送目标。
            LoggerUtils.d(TAG, "注册成功：$registerionId")

        } else if (p1?.action == JPushInterface.ACTION_MESSAGE_RECEIVED) {//收到透传消息（不显示通知，仅后台传递数据）
            val message = bundle?.getString(JPushInterface.EXTRA_MESSAGE)//是透传消息的内容（JSON 或纯文本）
            LoggerUtils.d(TAG, "透传消息:  $message")

        } else if (p1?.action == JPushInterface.ACTION_NOTIFICATION_RECEIVED) {//收到通知栏消息（用户可见）
            val title = bundle?.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE)//通知标题
            val content = bundle?.getString(JPushInterface.EXTRA_ALERT)//通知内容
            LoggerUtils.d(TAG, "通知消息:  $title  $content")
        }
        //else if (p1?.action == JPushInterface.ACTION_NOTIFICATION_CLICK_ACTION) {//用户点击通知栏消息
        else if (p1?.action == JPushInterface.ACTION_NOTIFICATION_OPENED) {//打开通知
            val title = bundle?.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE)
            val content = bundle?.getString(JPushInterface.EXTRA_ALERT)
            processCustomMessage(bundle) //处理额外参数，跳转到指定页面
            LoggerUtils.d(TAG, "打开通知:  $title  $content")
            //跳转到指定页面（需在 onReceive 中处理跳转逻辑）。
        }
    }
    private fun processCustomMessage(bundle: Bundle?) {
        val extras = bundle?.getString(JPushInterface.EXTRA_EXTRA)
        //在极光推送（JPush）中，bundle?.getString(JPushInterface.EXTRA_EXTRA)
        // 用于获取推送消息中的 附加字段（extra data），
        // 通常是一个 JSON 字符串，包含开发者自定义的额外数据
        if (TextUtils.isEmpty(extras)) {
            return
        }
        var module = ""
        var type = ""
        var param = ""
        try {
            val json = JSONObject(extras)
            val it = json.keys()
            while (it.hasNext()) {
                val myKey = it.next()
                if (myKey == "module") {
                    module = json.optString(myKey)
                }
                if (myKey == "type") {
                    type = json.optString(myKey)
                }
                if (myKey == "param") {
                    param = json.optString(myKey)
                }
            }
        } catch (e: JSONException) {
            Log.e(TAG, "Get message extra JSON error!")
        }
        ARouter.getInstance().build(Router.Ui.MainActivity)
//            .withString("param", param)
            .navigation()
//        when (module) {
//            "2" -> ARouter.getInstance().build(Router.Ui.MainActivity)
//                .withString("param", param)
//                .navigation()
//        }
    }
}